package com.atguigu.gulimall.search;

import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;

/**
 * 1、ElasticsearchDataAutoConfiguration：
 *      @Import({ ElasticsearchDataConfiguration.BaseConfiguration.class,
 * 		ElasticsearchDataConfiguration.RestClientConfiguration.class,
 * 		ElasticsearchDataConfiguration.ReactiveRestClientConfiguration.class })
 *
 * 	   	1）、ElasticsearchDataConfiguration.BaseConfiguration配了什么:
 * 	   	        类型转换器等  MappingElasticsearchConverter
 *
 * 	   	2）、ElasticsearchDataConfiguration.RestClientConfiguration配了什么：
 * 	   	       1、给容器中放了一个 【ElasticsearchRestTemplate】。（以后用这个对ES进行crud）
 * 	   	       2、ES官方自己还有一个客户端叫： RestHighLevelClient；
 *
 * 2、ElasticsearchRepositoriesAutoConfiguration：
 *          @Import(ElasticsearchRepositoriesRegistrar.class)
 *          所有实现 ElasticsearchRepository 接口的组件会被自动扫描到容器中；当成操作ES的Dao组件
 *          @Controller、@Service（业务逻辑层）、@Component（工具）、@Repository（标注dao层组件）
 *     随便写一个接口，继承 ElasticsearchRepository，就可以快捷的对es进行操作
 *     和MyBatis-Plus机制一样，写一个接口，继承 ElasticsearchRepository。自动拥有CRUD功能
 *
 * 3、ElasticsearchRestClientAutoConfiguration：
 *      【属性绑定：@EnableConfigurationProperties(ElasticsearchRestClientProperties.class)】
 *
 *      @Import({ ElasticsearchRestClientConfigurations.RestClientBuilderConfiguration.class,
 *              根据配置文件、创建一个 RestClientBuilder；建造者模式
 *
 * 		ElasticsearchRestClientConfigurations.RestHighLevelClientConfiguration.class,
 *              1）、给容器中 RestHighLevelClient：高级客户端; 用 ElasticsearchRestTemplate 操作ES；
 *              2）、给容器中 RestClient：低级客户端
 *
 * 		ElasticsearchRestClientConfigurations.RestClientFallbackConfiguration.class })
 * 	            1）、给容器中 RestClient 的容错对象；
 */
@EnableElasticsearchRepositories
@SpringCloudApplication
public class SearchMainApplication {
    public static void main(String[] args) {
        SpringApplication.run(SearchMainApplication.class, args);
    }
}
